home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / fdimg / oh!.2hd / OH!DEN_B.LZH / TOOLS / CDC / CDCSXSRC.LZH / ICON.HAS < prev    next >
Text File  |  1995-03-20  |  8KB  |  390 lines

  1. ***アイコン部
  2.  
  3.     .include    DOSCALL.MAC    *標準の奴(XC)
  4.     .include    SXCALL.MAC
  5.     .include    SXCALL.H
  6.     .include    YOU200.MAC    *独自のマクロ定義ファイルです
  7.     .include    HASMACRO.MAC    *HAS2.5以降のマクロパッケージ
  8.  
  9.     .include    WORK.INC    *ワークエリアの内容を定義するファイル
  10.     .include    FLAG.INC    *条件付アセンブル処理を定義するファイル
  11.  
  12.     .include    CDC.MAC
  13.  
  14. SUB_LOOP::
  15.     ifne    <tst.b    SW_Flag+SW_I(a5)>    *アイコンが起動していない限り休止
  16.         move.l    S_event(a5),d0        *「サブ」のウィンドウが参照するワーク
  17.         move.w    eventTable(pc,d0.w),d0    *イベントコードによって
  18.         jsr    eventTable(pc,d0.w)    *分岐する(返り値をd0に入れること)
  19. .iff    WINCOUNT<=2
  20. .xref    SUB2_LOOP
  21.         jbsr    SUB2_LOOP        *他にウィンドウを開くなら飛ぶ
  22. .endif
  23.     else
  24.         ~T
  25.     endif
  26.     rts
  27.  
  28. .xref    MSLUP
  29. .xref    MSRUP
  30. .xref    KEYUP
  31. .xref    dammy
  32.  
  33. .xref    Timerproc
  34. .xref    GetEvent
  35. .xref    ChkMouse_DClick
  36.  
  37. eventTable:                    *分岐テーブル
  38.     dc.w    S_IDLE-eventTable            *0    アイドルイベント
  39.     dc.w    S_MSLDOWN-eventTable        *1    レフトダウンイベント
  40.     dc.w    MSLUP-eventTable        *2    レフトアップイベント
  41.     dc.w    S_MSRDOWN-eventTable        *3    ライトダウンイベント
  42.     dc.w    MSRUP-eventTable        *4    ライトアップイベント
  43.     dc.w    S_KEYDOWN-eventTable        *5    キーダウンイベント
  44.     dc.w    KEYUP-eventTable        *6    キーアップイベント
  45.     dc.w    S_UPDATE-eventTable        *7    アップデートイベント
  46.     dc.w    dammy-eventTable        *8    --
  47.     dc.w    S_ACTIVATE-eventTable        *9    アクティベイトイベント
  48.     dc.w    dammy-eventTable        *10    --
  49.     dc.w    dammy-eventTable        *11    --
  50.     dc.w    S_SYSTEM1-eventTable        *12    システムイベント1
  51.     dc.w    S_SYSTEM2-eventTable        *13    システムイベント2
  52.     dc.w    dammy-eventTable        *14    システムイベント3
  53.     dc.w    dammy-eventTable        *15    システムイベント4
  54.  
  55.  
  56. S_IDLE:
  57. *    move.l    #50,-(sp)            *ベースタイム
  58. *    pea.l    ICN_CHK_COUNTER(a5)        *現在のカウンタ(Timerprocの中で更新する)
  59. *    SXSUB    Timerproc,8            *タイマー処理
  60. *    ifmi    <tst.l    d0>
  61. *        CDC    _CDC_STAT        *CD状態を得る
  62. *        move.l    d0,a1
  63. *        CDC    _CDC_TRACKS        *CDトラック情報を得る
  64. *        move.l    d0,a2
  65.  
  66.     move.l    IcnCDwork(a5),d0
  67.     move.l    d0,a1
  68.     ifne    <tst.l    d0>
  69.         jbsr    IcnTimeDraw
  70.     else
  71.         ~T
  72.         rts
  73.     endif
  74.  
  75. led_stat    =    46
  76.     ifne    <and.b #%10,led_stat+3(a1)>
  77.         move.l    #100,-(sp)    *ベースタイム
  78.         pea.l    RingCOUNTER(a5)        *現在のカウンタ(Timerprocの中で更新する)
  79.         SXSUB    Timerproc,8
  80.         ifmi    <tst.l    d0>
  81.             move.w    #-1,RingFlg(a5)
  82.             move.w    #0,IcnLogoFlg(a5)
  83. .xref    DrawIcn
  84.             SETPORT3 IcnwinPtr(a5)
  85.             jbsr    DrawIcn
  86.             move.w    #0,RingFlg(a5)
  87.         endif
  88.     endif
  89.  
  90.  
  91.     ~T
  92.     rts
  93.  
  94. IcnTimeDraw:
  95.  
  96. ifeq    <tst.w    曲番Flg(a5)>
  97.     ifeq    <tst.w    Led曲数Flg(a5)>
  98.         ifeq    <tst.l    ML_Flg(a5)>
  99.             ifeq    <tst.l    SL_Flg(a5)>
  100.                 ~T
  101.                 rts
  102.             endif
  103.         endif
  104.     endif
  105. endif
  106.  
  107.         SETPORT3 IcnwinPtr(a5)
  108.  
  109.         link    a6,#-10
  110.  
  111.         move.w    曲番10位(a5),d0
  112.         add.w    #$30,d0
  113.         move.b    d0,-10(a6)
  114.  
  115.         move.w    曲番1位(a5),d0
  116.         add.w    #$30,d0
  117.         move.b    d0,-9(a6)
  118.  
  119.         move.w    #'  ',-8(a6)
  120.  
  121.         move.w    MIN_low(a5),d0
  122.         add.w    #$30,d0
  123.         move.b    d0,-5(a6)
  124.  
  125.         move.w    MIN_hi(a5),d0
  126.         add.w    #$30,d0
  127.         move.b    d0,-6(a6)
  128.  
  129.         move.b    #':',-4(a6)
  130.  
  131.         move.w    SEC_low(a5),d0
  132.         add.w    #$30,d0
  133.         move.b    d0,-2(a6)
  134.  
  135.         move.w    SEC_hi(a5),d0
  136.         add.w    #$30,d0
  137.         move.b    d0,-3(a6)
  138.  
  139.         move.b    #0,-1(a6)
  140.  
  141.         move.w    #G_BACK*$100+G_PSET,-(sp)
  142.         SX    __GMPenMode,2
  143.  
  144.         move.w    #G_BLACK,-(sp)
  145.         SX    __GMBackColor,2
  146.  
  147.         pea.l    IcnTime(pc)
  148.         SX    __GMFillRect,4
  149.  
  150.  
  151.         move.w    #G_GREEN,-(sp)
  152.         SX    __GMForeColor,2
  153.  
  154.         move.w    #G_PSET,-(sp)
  155.         SX    __GMFontMode,2
  156.  
  157.         move.l    #12*$10000+25,-(sp)
  158.         SX    __GMMove,4
  159.  
  160.         pea.l    -10(a6)
  161.         SX    __GMDrawStrZ,4
  162.         unlk    a6
  163.         rts
  164.  
  165. IcnTime:    dc.w    12,25,70,25+11
  166.  
  167. S_MSLDOWN:
  168.     move.l    eventRec_whom1(a5),d0        *左クリックが起きたウィンドウレコード
  169.     beq    MSLD9                *NILなら
  170.     Xlea    IcnwinPtr(a5),a1        *自分のウィンドウ上で発生したか?
  171.     cmp.l    a1,d0
  172.     bne    MSLD9                *違うならMSLD9へ
  173.     SETPORT3 IcnwinPtr(a5)
  174.  
  175.     SXSUB    GetEvent,0            *自分へのイベントなのでイベントを取り除く
  176.     jbsr    ChkMouse_DClick            *ダブルクリックならウィンドウ化する
  177.     ifne    <tst.b    D_Click(a5)>
  178.         jbsr    IcntoWin
  179.         ~T
  180.         rts
  181.     elseifeq <tst.w    IcnwinActive(a5)>
  182.         Xpea    IcnwinPtr(a5)
  183.         SX    __WMSelect,4
  184.         move.w    #-1,IcnwinActive(a5)
  185.         move.w    #-1,IcnLogoFlg(a5)
  186.         SETPORT3 IcnwinPtr(a5)
  187.         jbsr    DrawIcn
  188.         move.w    #0,IcnLogoFlg(a5)
  189.  
  190.     endif
  191. .xref    MSLDdrag
  192.     move.w    IcnwinActive(a5),-(sp)
  193.     pea.l    IcnwinRect(pc)            *RECTPTR
  194.     Xpea    IcnwinPtr(a5)            *WINREC
  195.     SXSUB    MSLDdrag,10
  196.  
  197. MSLD9
  198.     ~T
  199.     rts
  200.  
  201. S_MSRDOWN:
  202. .xref    ChkMousePtr
  203. .xref MSRDproc
  204.     move.l    eventRec_whom1(a5),d0        *右クリック時のウィンドウレコード
  205.     beq    MSRD9                *NILなら
  206.     Xlea    IcnwinPtr(a5),a0            *自分のウィンドウレコード
  207.     cmp.l    a0,d0                *同じウィンドウ上で発生したか
  208.     bne    MSRD9
  209.  
  210.     move.l eventRec_ShiftBit(a5),d0
  211.     ifne <tst.w IcnwinActive(a5)>        *現在ウィンドウはアクティブか?
  212.         SETPORT3 IcnwinPtr(a5)
  213.         SXSUB    ChkMousePtr,0            *現在のマウスのローカル座標を
  214.                             *ワークにいれる
  215.         jbsr    MSRDproc
  216.         bmi    MSRD_ERR
  217.     elseifne <andi.l #KS_OPT1,d0>
  218.         SETPORT3 IcnwinPtr(a5)
  219.         SXSUB    ChkMousePtr,0
  220.         jbsr    MSRDproc
  221.         bmi    MSRD_ERR
  222.     endif
  223. MSRD9:
  224.     ~T
  225.     rts
  226. MSRD_ERR:
  227.     ~F
  228.     rts
  229. IcnMenuproc:
  230.     rts
  231.  
  232. S_KEYDOWN:
  233.     ifne    <tst.w    IcnwinActive(a5)>        *現在ウィンドウはアクティブか?
  234.         ifeq    <SCUT    K_Q,KS_OPT1>
  235.             ~F
  236.             rts            *アクティブでOPT1+Qなら終了
  237.         endif
  238.     endif
  239.     ~T
  240.     rts
  241. S_UPDATE:
  242.     Xpea    IcnwinPtr(a5)
  243.     SX    __WMUpdate,4
  244.  
  245. *    move.w    #-1,RingFlg(a5)
  246.     move.w    #-1,IcnLogoFlg(a5)
  247.  
  248.     SETPORT3 IcnwinPtr(a5)
  249.     jbsr    DrawIcn
  250. *    move.w    #0,RingFlg(a5)
  251.     move.w    #0,IcnLogoFlg(a5)
  252.  
  253.     Xpea    IcnwinPtr(a5)
  254.     SX    __WMUpdtOver,4
  255.  
  256.     ~T
  257.     rts
  258.  
  259. S_ACTIVATE:
  260.     move.l    eventRec_whom1(a5),d0
  261.     beq    ACT9                *NILなら
  262.     Xlea    IcnwinPtr(a5),a0        *自分のウィンドウが
  263.  
  264.     ifne <cmp.l    a0,d0>            *アクティブになった?
  265.     move.w    #0,IcnwinActive(a5)        *アクティブフラグをリセット
  266.     else
  267.         move.w    #-1,IcnwinActive(a5)        *アクティブフラグをセット
  268.     endif
  269.     move.w    #-1,IcnLogoFlg(a5)
  270.     SETPORT3 IcnwinPtr(a5)
  271.     jbsr    DrawIcn
  272.     move.w    #0,IcnLogoFlg(a5)
  273. ACT9:
  274.     ~T
  275.     rts
  276. S_SYSTEM1:
  277. S_SYSTEM2:
  278.     move.w    eventRec_what2(a5),d0
  279.     cmp.w    #ENDTSK,d0            *タスクの終了?
  280.     beq    CloseBox            *ならばおしまい
  281.     cmp.w    #CLOSEALL,d0            *全ウィンドウのクローズ?
  282.     beq    CloseBox            *ならばおしまい
  283.     ifeq    <cmp.w    #WINDOWSELECT,d0>    *ウィンドウのセレクト?
  284.         move.l    d0,-(sp)
  285.         jbsr    WindowSelect    *ならばWindowSelectへ
  286.         move.l    (sp)+,d0
  287.     endif
  288.  
  289.     ~T
  290.     rts
  291. WindowSelect:
  292.     Xpea    IcnwinPtr(a5)            *自分のウィンドウをアクティブに
  293.     SX    __WMSelect,4
  294.     ~T
  295.     rts
  296. CloseBox:
  297.  
  298.     ~F
  299.     rts
  300. IcntoWin::
  301.         Xpea    IcnwinPtr(a5)
  302.         SX    __WMSelect,4
  303.         move.w    #-1,IcnwinActive(a5)
  304.  
  305.         SETPORT3 IcnwinPtr(a5)
  306.         move.l    #0,-(sp)
  307.         SX    __GMLocalToGlobal,4
  308.  
  309.         move.w    winActive(a5),-(sp)
  310.         move.l    d0,-(sp)
  311.         Xpea    winPtr(a5)
  312.         SX    __WMMove,10
  313.  
  314.         Xpea    winPtr(a5)
  315.         SX    __WMShow,4
  316.  
  317. ifne    <tst.b    SW_Flag+SW_I(a5)>
  318.     Xpea    IcnwinPtr(a5)
  319.     .if    WINTYPE='H'
  320.         SX    __WMClose,4
  321.     .else
  322.     .if    WINTYPE='P'
  323.         SX    __WMDispose,4
  324.     .endif
  325.     .endif
  326.  
  327.     move.w    #0,-(sp)        *付属する数値
  328.     move.w    #SW_I,-(sp)        *
  329.     move.w    #SW_EXCHG,-(sp)
  330. .xref    SWITCHproc
  331.     SXSUB    SWITCHproc,6
  332.     move.w    #0,IcnwinActive(a5)
  333.  
  334.         Xpea    winPtr(a5)
  335.         SX    __WMSelect,4
  336.         move.w    #-1,winActive(a5)
  337. endif
  338.     rts
  339.  
  340. _ICNWDEF_NUM    =    _WDEF_NUM
  341. IcnWinOpen::
  342.  
  343.     link    a6,#-8
  344.  
  345.     move.l    #0,-(sp)
  346.     SX    __GMLocalToGlobal,4
  347.  
  348.     move.l    d0,_IcnwinRect(a5)            *デフォルト位置を得る
  349. _POS1:
  350.     add.l    IcnwinRect+4(pc),d0            *ウィンドウレクタングルを作成
  351.     move.l    d0,_IcnwinRect+4(a5)
  352. _POS2:
  353.     pea.l    -8(a6)
  354.     SX    __SXGetDispRect,4
  355.  
  356.     pea    _IcnwinRect(a5)
  357.     pea    -8(a6)
  358.     pea    _IcnwinRect(a5)
  359.     SX    __GMAdjustRect,12        *エラーはでない予定
  360.  
  361.     move.l    taskID(a5),-(sp)        *タスクID
  362.     move.w    #TRUE,-(sp)            *クローズボックスあり
  363.     move.l    #TRUE,-(sp)            *手前に
  364.     move.w    #_ICNWDEF_NUM*16+WINOPT,-(sp)    
  365.     move.w    #TRUE,-(sp)            *可視
  366.     pea.l    WINTITLE(pc)            *LASCII
  367.     pea.l    _IcnwinRect(a5)            *ウィンドウレクタングル
  368.     Xpea    IcnwinPtr(a5)            *ワーク上に作成
  369.     SX    __WMOpen,26
  370.     tst.l    d0                *エラー?
  371. *    bmi    Win_init_ERR            *ならば_INIT_Errへ
  372.     move.w    #-1,IcnwinActive(a5)        *アクティブフラグをセット
  373.     move.w    #0,winActive(a5)
  374.  
  375.     SX    __EMSysTime,0
  376.     move.l    d0,RingCOUNTER(a5)
  377.     move.l    d0,ICN_CHK_COUNTER(a5)
  378.  
  379.     SETPORT3 IcnwinPtr(a5)
  380.  
  381.         unlk    a6
  382.         ~T
  383.         rts
  384.  
  385. IcnwinRect::    dc.w    0,0,80,43
  386.  
  387. WINTITLE:    LASCIIZ    'ICN_OF_CDCSX'
  388. .even
  389. .end
  390.